package com.ztr.leetcode.day04;

import java.util.Arrays;

public class MoveZero {
    /**
     * 我们创建两个指针 i 和 j，第一次遍历的时候指针 j 用来记录当前有多少 非0 元素。
     * 即遍历的时候每遇到一个 非0 元素就将其往数组左边挪，第一次遍历完后，j 指针的下标就指向了最后一个 非0 元素下标。
     * 第二次遍历的时候，起始位置就从 j 开始到结束，将剩下的这段区域内的元素全部置为 0。
     * @param nums
     * @return
     */
    public static int[] moveZeroes(int[] nums) {
        if(nums==null) {
            return null;
        }
        //第一次遍历的时候，j指针记录非0的个数，只要是非0的统统都赋给nums[j]
        int j = 0;
        for(int i=0;i<nums.length;++i) {
            if(nums[i]!=0) {
                nums[j++] = nums[i];
            }
        }
        //非0元素统计完了，剩下的都是0了
        //所以第二次遍历把末尾的元素都赋为0即可
        for(int i=j;i<nums.length;++i) {
            nums[i] = 0;
        }
        return nums;
    }

    public static void main(String[] args) {
        int[] nums = {0,1,0,3,12};
        int[] result  = moveZeroes(nums);
        // [I@2aae9190 是一个哈希值和内存地址
        System.out.println(result);
        // [1, 3, 12, 0, 0]
        System.out.println(Arrays.toString(result));
    }

}
